package com.chaopei.day38.utils;

import org.springframework.stereotype.Component;
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.Context;

import javax.annotation.Resource;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;

/**
 * @Author Corday 天涯
 * @Date 2022/4/22 17:01
 */
@Component//方便其它地方注入
public class MyHtml {//用于动态网页静态化处理
    //    用于静态化
    @Resource
    private TemplateEngine te;
    //参数(属性名,静态化数据,静态网页文件名)
    public void saveHtml(String name,Object value,String uri) {//object是网页需要新的数据
        //1.上下文件对象Content,用于保存object
        Context context = new Context();
//        保存生成的静态网页的数据,obj可以是某个网页的名称,数据单独拿到
        context.setVariable(name, value);
//    2.打印输出流PrintWriter,将静态网页内容写入外部本地磁盘的nginx服务器中,CDN,OSS,
        PrintWriter pw = null;
        File file = null;
        try {
            //文件夹不存在就创建
            file = new File("D:/programd/nginx-1.18.0/day38");
            if (!file.exists()) {
                file.mkdir();
            }
            //此处静态后的网页保存到了nginx的服务器的文件夹中,需要通过nginx帮我们切换
            file=new File("D:/programd/nginx-1.18.0/day38/"+uri+".html");
            if(!file.exists()){//静态文件不存在也创建
                //将商品展示页静态
                pw = new PrintWriter("D:/programd/nginx-1.18.0/day38/"+uri+".html");
                //生成静态网页(动态网页位置,上下文，输出流)
                te.process("pages/"+uri, context, pw);
            }
        } catch (FileNotFoundException e) {
            System.out.println("***静态化异常***");
        } finally {
            if (pw != null) {
                //pw.flush();
                pw.close();
            }
        }
    }

    ////通过多线程调用实现静态
    public void createHtml(String name,Object value,String uri) {
        //用箭头函数初始调用一次
        ThreadTools.execute(() -> saveHtml(name,value,uri));
        //再次提交子线程对象
        ThreadTools.execute(new Runnable() {
            @Override
            public void run() {
                saveHtml(name,value,uri);
            }
        });
    }
}